//
// AutoSystem.hpp for AutoSystem in /home/mambou_j//babel-2014
// 
// Made by jacquesquentin mamboumouafo
// Login   <mambou_j@epitech.net>
// 
// Started on  Thu May 10 23:52:14 2012 jacquesquentin mamboumouafo
// Last update Wed May 16 16:53:32 2012 jacquesquentin mamboumouafo
//


#ifndef	__AUTOSYSTEM_HPP__
#define	__AUTOSYSTEM_HPP__

#include	"System.hpp"


namespace	portaudio
{

  //////
  /// @brief A RAII idiom class to ensure automatic clean-up when an exception
  /// is raised.
  ///
  /// A simple helper class which uses the 'Resource Acquisition is
  /// Initialization' idiom (RAII). Use this class to initialize/terminate the
  /// System rather than using System directly. AutoSystem must be created on
  /// stack and must be valid throughout the time you wish to use PortAudioCpp.
  /// Your 'main' function might be a good place for it.
  ///
  /// To avoid having to type port::audioSystem::instance().xyz() all the time,
  /// it's usually a good idea to make a reference to the System which can be
  /// accessed directly.
  /// @verbatim
  /// portaudio::AutoSys autoSys;
  /// portaudio::System &sys = portaudio::System::instance();
  /// @endverbatim
  //////
	class	AutoSystem
	{
	public:
	  AutoSystem(bool initialize = true)
	  {
	    if (initialize)
	      System::initialize();
	  }

	  ~AutoSystem()
	  {
	    if (System::exists())
	      System::terminate();
	  }

	  void	initialize()
	  {
	    System::initialize();
	  }

	  void	terminate()
	  {
	    System::terminate();
	  }
	};
}

#endif
